package com.sg.service.biz.pbff.impl;

import cn.hutool.core.bean.BeanUtil;
import com.sg.common.exception.Assert;
import com.sg.common.util.RedisUtil;
import com.sg.dto.biz.pbff.req.*;
import com.sg.dto.biz.pbff.res.*;
import com.sg.service.biz.pbff.UserService;
import com.sg.service.biz.pbff.nb.NbUser;
import com.wicket.okrframework.integration.dto.*;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.stream.Collectors;

/**
 * @author ：
 * @version 1.0
 * @date ：
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    com.sg.service.biz.framework.UserService fwBaseUserClient;
    @Resource
    com.sg.service.biz.framework.MemberService fwBaseMemberClient;
    @Resource
    com.sg.service.biz.framework.DivineDataService fwBaseDivineDataClient;
    @Resource
    NbUser nbUser;
    @Resource
    private RedisUtil redisUtil;

    /**
     * B1-2查询个人信息列表（平台）[421]
     * gen by moon at 10/18/2022, 10:05:15 PM
     */
    @Trace(operationName = "B1-2查询个人信息列表（平台）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffQueryPersonalInformationListRespDto queryPersonalInformationList(BffQueryPersonalInformationListReqDto reqDto) {


        QueryPersonalInformationListRespDto queryPersonalInformationListRespDto_1 = null;
//步骤0: D1-2查询个人信息列表 - queryPersonalInformationList
        QueryPersonalInformationListRespDto queryPersonalInformationListRespDto = null;
        QueryPersonalInformationListReqDto queryPersonalInformationListReqDto = new QueryPersonalInformationListReqDto();
        if (reqDto != null) {
            queryPersonalInformationListReqDto.setIdCardName(reqDto.getIdCardName());//SimpleFieldAssign//sourceId:30416_1
            queryPersonalInformationListReqDto.setSourceCode(reqDto.getSourceCode());//SimpleFieldAssign//sourceId:30410_1
            queryPersonalInformationListReqDto.setIsInvalid(reqDto.getIsInvalid());//SimpleFieldAssign//sourceId:30411_1
            queryPersonalInformationListReqDto.setSenceId(reqDto.getSenceId());//SimpleFieldAssign//sourceId:30413_1
            queryPersonalInformationListReqDto.setAppId(reqDto.getAppId());//SimpleFieldAssign//sourceId:30415_1
            queryPersonalInformationListReqDto.setSearchStartTime(reqDto.getSearchStartTime());//SimpleFieldAssign//sourceId:47470_1
            queryPersonalInformationListReqDto.setSearchEndTime(reqDto.getSearchEndTime());//SimpleFieldAssign//sourceId:47471_1
        }

        /*D1-2查询个人信息列表[420]   */
        Assert.isNull(queryPersonalInformationListReqDto.getAppId(), "B1-2查询个人信息列表（平台）-D1-2查询个人信息列表-创建于联盟应用ID不能为空", false);
        queryPersonalInformationListRespDto = fwBaseUserClient.queryPersonalInformationList(queryPersonalInformationListReqDto).getData();


        queryPersonalInformationListRespDto_1 = queryPersonalInformationListRespDto;

        BffQueryPersonalInformationListRespDto retData = new BffQueryPersonalInformationListRespDto();
        if (queryPersonalInformationListRespDto_1 != null) {
            retData.setUsersList(queryPersonalInformationListRespDto_1.getUserList().stream().map(item -> BeanUtil.toBean(item, BffUsersDto.class)).collect(Collectors.toList()));//objList-to-objLists//sourceId:30423_1
        }


        retData.setPageNum(queryPersonalInformationListRespDto.getPageNum());
        retData.setPageSize(queryPersonalInformationListRespDto.getPageSize());
        retData.setTotal(queryPersonalInformationListRespDto.getTotalNum());
        retData.setIsLastPage((Math.ceil(Double.valueOf(queryPersonalInformationListRespDto.getTotalNum()) / Double.valueOf(queryPersonalInformationListRespDto.getPageSize()))) <= retData.getPageNum());


        return retData;
    }

    /**
     * B1-2取消失效个人账号（平台）[432]
     * gen by moon at 8/10/2022, 3:39:50 AM
     */
    @Trace(operationName = "B1-2取消失效个人账号（平台）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffCancelIsinvalidSetUserIdRespDto cancelIsinvalidSetUserId(BffCancelIsinvalidSetUserIdReqDto reqDto) {


        //步骤0: D1-2修改个人账号 - updateUser
        UpdateUserRespDto updateUserRespDto = null;
        UpdateUserReqDto updateUserReqDto = new UpdateUserReqDto();
        updateUserReqDto.setIsInvalid("FALSE");//sourceId:30760_1
        if (updateUserReqDto != null && updateUserReqDto.getIsInvalid() != null && updateUserReqDto.getIsInvalid().equals("FALSE")) {
            updateUserReqDto.setInvalidReason(null);
        }//sourceId:30966_1
        if (updateUserReqDto != null && updateUserReqDto.getIsInvalid() != null && updateUserReqDto.getIsInvalid().equals("FALSE")) {
            updateUserReqDto.setInvalidTime(null);
        }//sourceId:33132_1
        if (reqDto != null) {
            updateUserReqDto.setUserId(reqDto.getUserId());//sourceId:30759_1
        }

        /*D1-2修改个人账号[1035]   */
        Assert.isNull(updateUserReqDto.getUserId(), "B1-2取消失效个人账号（平台）-D1-2修改个人账号-个人账号不能为空", false);
        Assert.isNull(updateUserReqDto.getIsInvalid(), "B1-2取消失效个人账号（平台）-D1-2修改个人账号-是否失效不能为空", false);
        Assert.isNull(updateUserReqDto.getInvalidType(), "B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效类型不能为空", false);
        Assert.isNull(updateUserReqDto.getInvalidReason(), "B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效原因不能为空", false);
        Assert.isNull(updateUserReqDto.getInvalidTime(), "B1-2取消失效个人账号（平台）-D1-2修改个人账号-失效时间不能为空", false);
        updateUserRespDto = fwBaseUserClient.updateUser(updateUserReqDto).getData();


        BffCancelIsinvalidSetUserIdRespDto retData = new BffCancelIsinvalidSetUserIdRespDto();


        return retData;
    }

    /**
     * B1-2设无效个人账号（平台）[430]
     * gen by moon at 8/10/2022, 3:39:49 AM
     */
    @Trace(operationName = "B1-2设无效个人账号（平台）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffUpdateIsinvalidSetUserIdRespDto updateIsinvalidSetUserId(BffUpdateIsinvalidSetUserIdReqDto reqDto) {


        //步骤0: D1-2修改个人账号 - updateUser
        UpdateUserRespDto updateUserRespDto = null;
        UpdateUserReqDto updateUserReqDto = new UpdateUserReqDto();
        updateUserReqDto.setIsInvalid("TRUE");//sourceId:30734_1
        if (reqDto != null) {
            updateUserReqDto.setUserId(reqDto.getUserId());//sourceId:30733_1
            updateUserReqDto.setInvalidType(reqDto.getInvalidType());//sourceId:30735_1
            updateUserReqDto.setInvalidReason(reqDto.getInvalidReason());//sourceId:30736_1
        }

        /*D1-2修改个人账号[1035]   */
        Assert.isNull(updateUserReqDto.getUserId(), "B1-2设无效个人账号（平台）-D1-2修改个人账号-个人账号不能为空", false);
        Assert.isNull(updateUserReqDto.getInvalidType(), "B1-2设无效个人账号（平台）-D1-2修改个人账号-失效类型不能为空", false);
        updateUserRespDto = fwBaseUserClient.updateUser(updateUserReqDto).getData();


//步骤1: D1-2查询身份人员列表 - queryBeginMemberList
        QueryBeginMemberListRespDto queryBeginMemberListRespDto = null;
        QueryBeginMemberListReqDto queryBeginMemberListReqDto = new QueryBeginMemberListReqDto();
        if (reqDto != null) {
            queryBeginMemberListReqDto.setUserId(reqDto.getUserId());//sourceId:51299_1
        }

        /*D1-2查询身份人员列表[988]   */

        queryBeginMemberListRespDto = fwBaseMemberClient.queryBeginMemberList(queryBeginMemberListReqDto).getData();


//步骤2: D-Redis批量清空用户Token - batchClearTokenFromRedis
        //ModelCode: batchClearTokenFromRedis
        BatchClearTokenFromRedisRespDto batchClearTokenFromRedisRes = null;
        if (queryBeginMemberListRespDto != null) {
            BatchClearTokenFromRedisReqDto batchClearTokenFromRedisReq = new BatchClearTokenFromRedisReqDto();
            if (queryBeginMemberListRespDto != null) {
                batchClearTokenFromRedisReq.setBeginMemberList(queryBeginMemberListRespDto.getBeginMemberList().stream().map(item -> item.getOriginalRoleMemberId())
                        .collect(Collectors.toList()));//sourceId:51316_1
            }

            /*D-Redis批量清空用户Token[1712]  入参身份ID集合，清除用户token */

            batchClearTokenFromRedisRes = nbUser.batchClearTokenFromRedis(batchClearTokenFromRedisReq);


        }

//步骤3: Redis批量清空用户信息 - batchClearUserInfoFromRedis
        //ModelCode: batchClearUserInfoFromRedis
        BatchClearUserInfoFromRedisRespDto batchClearUserInfoFromRedisRes = null;
        if (queryBeginMemberListRespDto != null) {
            BatchClearUserInfoFromRedisReqDto batchClearUserInfoFromRedisReq = new BatchClearUserInfoFromRedisReqDto();
            if (queryBeginMemberListRespDto != null) {
                batchClearUserInfoFromRedisReq.setBeginMemberList(queryBeginMemberListRespDto.getBeginMemberList().stream().map(item -> item.getOriginalRoleMemberId())
                        .collect(Collectors.toList()));//sourceId:51317_1
            }

            /*Redis批量清空用户信息[1713]  入参身份ID数据集，清除用户就职信息缓存 */

            batchClearUserInfoFromRedisRes = nbUser.batchClearUserInfoFromRedis(batchClearUserInfoFromRedisReq);


        }

        BffUpdateIsinvalidSetUserIdRespDto retData = new BffUpdateIsinvalidSetUserIdRespDto();


        return retData;
    }

    /**
     * B1-2查询个人信息详情（平台）[424]
     * gen by moon at 10/18/2022, 6:05:42 AM
     */
    @Trace(operationName = "B1-2查询个人信息详情（平台）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffQueryPersonalInformationDetailRespDto queryPersonalInformationDetail(BffQueryPersonalInformationDetailReqDto reqDto) {


        QueryPersonalInformationDetailRespDto queryPersonalInformationDetailRespDto_1 = null;
        QueryUsersUnionDetailRespDto queryUsersUnionDetailRespDto_1 = null;
//步骤0: D1-2查询个人信息详情 - queryPersonalInformationDetail
        QueryPersonalInformationDetailRespDto queryPersonalInformationDetailRespDto = null;
        QueryPersonalInformationDetailReqDto queryPersonalInformationDetailReqDto = new QueryPersonalInformationDetailReqDto();
        if (reqDto != null) {
            queryPersonalInformationDetailReqDto.setUserId(reqDto.getUserId());//SimpleFieldAssign//sourceId:30500_1
        }

        /*D1-2查询个人信息详情[398]   */
        Assert.isNull(queryPersonalInformationDetailReqDto.getUserId(), "B1-2查询个人信息详情（平台）-D1-2查询个人信息详情-个人账号不能为空", false);
        queryPersonalInformationDetailRespDto = fwBaseUserClient.queryPersonalInformationDetail(queryPersonalInformationDetailReqDto).getData();


        queryPersonalInformationDetailRespDto_1 = queryPersonalInformationDetailRespDto;

//步骤1: D1-2查询联盟用户列表 - queryUsersUnionDetail
        QueryUsersUnionDetailRespDto queryUsersUnionDetailRespDto = null;
        QueryUsersUnionDetailReqDto queryUsersUnionDetailReqDto = new QueryUsersUnionDetailReqDto();
        if (reqDto != null) {
            queryUsersUnionDetailReqDto.setUserId(reqDto.getUserId());//SimpleFieldAssign//sourceId:30536_1
        }
  
    /*D1-2查询联盟用户列表[423] 1、通过这个联盟应用对象类型CODE，展示前端固定的图标；
2、联盟应用对象id里面存的是用户相对唯一的应用账号ID（比如微信的OpenID）
3、展示绑定后的用户名：比如微信的artistcenter，我们自己联盟应用，显示个人账号对应的用户名；  */
        Assert.isNull(queryUsersUnionDetailReqDto.getUserId(), "B1-2查询个人信息详情（平台）-D1-2查询联盟用户列表-个人账号不能为空", false);
        queryUsersUnionDetailRespDto = fwBaseUserClient.queryUsersUnionDetail(queryUsersUnionDetailReqDto).getData();


        queryUsersUnionDetailRespDto_1 = queryUsersUnionDetailRespDto;

        BffQueryPersonalInformationDetailRespDto retData = new BffQueryPersonalInformationDetailRespDto();
        if (queryPersonalInformationDetailRespDto_1 != null) {
            retData.setUserId(queryPersonalInformationDetailRespDto_1.getUserId());//SimpleFieldAssign//sourceId:30537_1
            retData.setUserName(queryPersonalInformationDetailRespDto_1.getUserName());//SimpleFieldAssign//sourceId:30538_1
            retData.setEmail(queryPersonalInformationDetailRespDto_1.getEmail());//SimpleFieldAssign//sourceId:30539_1
            retData.setPassByEmail(queryPersonalInformationDetailRespDto_1.getPassByEmail());//SimpleFieldAssign//sourceId:30540_1
            retData.setPhone(queryPersonalInformationDetailRespDto_1.getPhone());//SimpleFieldAssign//sourceId:30541_1
            retData.setPassByPhone(queryPersonalInformationDetailRespDto_1.getPassByPhone());//SimpleFieldAssign//sourceId:30542_1
            retData.setIsUserInfoDone(queryPersonalInformationDetailRespDto_1.getIsUserInfoDone());//SimpleFieldAssign//sourceId:30543_1
            retData.setRegTime(queryPersonalInformationDetailRespDto_1.getRegTime());//SimpleFieldAssign//sourceId:30544_1
            retData.setLastLoginTime(queryPersonalInformationDetailRespDto_1.getLastLoginTime());//SimpleFieldAssign//sourceId:30545_1
            retData.setLastLoginIp(queryPersonalInformationDetailRespDto_1.getLastLoginIp());//SimpleFieldAssign//sourceId:30546_1
            retData.setLastPasswordChangedTime(queryPersonalInformationDetailRespDto_1.getLastPasswordChangedTime());//SimpleFieldAssign//sourceId:30547_1
            retData.setLastLockoutTime(queryPersonalInformationDetailRespDto_1.getLastLockoutTime());//SimpleFieldAssign//sourceId:30548_1
            retData.setFailedPasswordAttemptCount(queryPersonalInformationDetailRespDto_1.getFailedPasswordAttemptCount());//SimpleFieldAssign//sourceId:30549_1
            retData.setFirstFailedPasswordAttempTime(queryPersonalInformationDetailRespDto_1.getFirstFailedPasswordAttempTime());//SimpleFieldAssign//sourceId:30550_1
            retData.setDevName(queryPersonalInformationDetailRespDto_1.getDevName());//SimpleFieldAssign//sourceId:30551_1
            retData.setSourceCode(queryPersonalInformationDetailRespDto_1.getSourceCode());//SimpleFieldAssign//sourceId:30552_1
            retData.setIsInvalid(queryPersonalInformationDetailRespDto_1.getIsInvalid());//SimpleFieldAssign//sourceId:30553_1
            retData.setInvalidType(queryPersonalInformationDetailRespDto_1.getInvalidType());//SimpleFieldAssign//sourceId:30554_1
            retData.setInvalidReason(queryPersonalInformationDetailRespDto_1.getInvalidReason());//SimpleFieldAssign//sourceId:30555_1
            retData.setAppId(queryPersonalInformationDetailRespDto_1.getAppId());//SimpleFieldAssign//sourceId:30557_1
            retData.setUserIntro(queryPersonalInformationDetailRespDto_1.getUserIntro());//SimpleFieldAssign//sourceId:30561_1
            retData.setSex(queryPersonalInformationDetailRespDto_1.getSex());//SimpleFieldAssign//sourceId:30562_1
            retData.setBirthday(queryPersonalInformationDetailRespDto_1.getBirthday());//SimpleFieldAssign//sourceId:30563_1
            retData.setCity(queryPersonalInformationDetailRespDto_1.getCity());//SimpleFieldAssign//sourceId:30564_1
            retData.setAppName(queryPersonalInformationDetailRespDto_1.getAppName());//SimpleFieldAssign//sourceId:30565_1
            retData.setInviteUserId(queryPersonalInformationDetailRespDto_1.getInviteUserId());//SimpleFieldAssign//sourceId:30556_1
            retData.setUserFace(queryPersonalInformationDetailRespDto_1.getUserFace());//SimpleFieldAssign//sourceId:67328_1
            retData.setIdCardName(queryPersonalInformationDetailRespDto_1.getIdCardName());//SimpleFieldAssign//sourceId:67329_1
            retData.setNickName(queryPersonalInformationDetailRespDto_1.getNickName());//SimpleFieldAssign//sourceId:67330_1
            retData.setInviteUserIdCardName(queryPersonalInformationDetailRespDto_1.getInviteUserIdCardName());//SimpleFieldAssign//sourceId:67331_1
            retData.setInviteUserFace(queryPersonalInformationDetailRespDto_1.getInviteUserFace());//SimpleFieldAssign//sourceId:67332_1
            retData.setInviteNickName(queryPersonalInformationDetailRespDto_1.getInviteNickName());//SimpleFieldAssign//sourceId:67333_1
        }
        if (queryUsersUnionDetailRespDto_1 != null) {
            retData.setUsersUnionList(queryUsersUnionDetailRespDto_1.getUsersUnionList().stream().map(item -> BeanUtil.toBean(item, BffUsersUnionDto.class)).collect(Collectors.toList()));//objList-to-objLists//sourceId:30573_1
        }


        return retData;
    }
///**
//   * B1查询个人资料详情(公共)[7041]
//   * gen by moon at 5/31/2023, 6:28:20 PM
//   */
//    @Trace(operationName = "B1查询个人资料详情(公共)")
//    @Tags({@Tag(key = "参数",value = "arg[0]"),
//            @Tag(key = "返回值",value = "returnedObj")})
//  @Override
//  public BffQueryUserInfoDetailComRespDto queryUserInfoDetailCom(BffQueryUserInfoDetailComReqDto reqDto){
//
//
//       QueryUserInfoDetailComRespDto queryUserInfoDetailComRespDto_1 =null;
////步骤0: D1-2查询个人资料详情(公共) - queryUserInfoDetailCom
//     QueryUserInfoDetailComRespDto queryUserInfoDetailComRespDto = null;
//    QueryUserInfoDetailComReqDto queryUserInfoDetailComReqDto=new QueryUserInfoDetailComReqDto();
//  queryUserInfoDetailComReqDto.setUserId(CommonFunctionHelper.getBaseInfoFromLocal().getSpecUserId());//CURRENT_USERID//sourceId:996633_1
//
//    /*D1-2查询个人资料详情(公共)[408]   */
//    Assert.isNull(queryUserInfoDetailComReqDto.getUserId(),"B1查询个人资料详情(公共)-D1-2查询个人资料详情(公共)-账号不能为空",false);
//      queryUserInfoDetailComRespDto = fwBaseUserClient.queryUserInfoDetailCom(queryUserInfoDetailComReqDto).getData()/*vcase invoke 跨dubbo调用;*/;
//
//
//      queryUserInfoDetailComRespDto_1 = queryUserInfoDetailComRespDto;
//
//BffQueryUserInfoDetailComRespDto retData = new BffQueryUserInfoDetailComRespDto();
//  if(queryUserInfoDetailComRespDto_1!=null){
//      retData.setPersonalDataId(queryUserInfoDetailComRespDto_1.getPersonalDataId());//SimpleFieldAssign//sourceId:996644_1
//retData.setUserId(queryUserInfoDetailComRespDto_1.getUserId());//SimpleFieldAssign//sourceId:996645_1
//retData.setUserFace(queryUserInfoDetailComRespDto_1.getUserFace());//SimpleFieldAssign//sourceId:996646_1
//retData.setIdCardName(queryUserInfoDetailComRespDto_1.getIdCardName());//SimpleFieldAssign//sourceId:996647_1
//retData.setNickName(queryUserInfoDetailComRespDto_1.getNickName());//SimpleFieldAssign//sourceId:996648_1
//retData.setSex(queryUserInfoDetailComRespDto_1.getSex());//SimpleFieldAssign//sourceId:996649_1
//    }
//
//
//
//
//return retData;
//  }
//    //
}
